figure.DomFigure = new Class ( {
    initialize: function(id) {
        this.id = id;
        this.indicators = [];
    },
    names: {
        'siloMalta': 'Silo Malta',
        'siloAdjuntos': 'Silo Adjuntos',
        'ollaCrudos': 'Olla de Crudos',
        'ollaMezclas': 'Olla de Mezclas',
        'ollaFiltr': 'Olla Filtracion',
        'ollaCoccion': 'Olla de Cocción',
        'sedimentation': 'Sedimentación',
        'afecho': "Afecho",
        'tolvaSum': "Tolva de Suministro",
        'tolvaA': "Tolvas",
        'tolvaB': "Dosificadoras",
        'tamiz': "Tamización",
        'molido': "Molido",
        'cooling': "Enfriamiento",
        'tank_f': "Fermentación",
        'tank_m': "Maduración",
        'tank_a': "Almacenamiento",
        'formdialCrudos': "Temperatura Olla de Crudos (ºC): ",
        'formdialMezclas': "Temperatura Olla de Mezclas (ºC): ",
        'formdialCool': "Temperatura Enfriamiento Mosto (ºC): ",
        'formdialCool2': "Temperatura Enfriamiento Cerveza (ºC): ",
        'formmostoCrudo': "Relación Mosto/Grits : ",
        'formdialAzucar': "Concentración Azúcar (ºP):",
        'cooling2':"Enfriamiento",
        'formphCoccion': "PH Olla de Cocción:",
        'formdialSum': "Capacidad Tolva Sum. (Lts):",
        'filtro': "Filtración",
        'formdialF': "Capacidad Fermentación (Lts)",
        'formdialM': "Capacidad Maduración (Lts)",
        'formdialA': "Capacidad Almacenamiento (Lts)",
        'formdialTolva': "Capacidad Tolva Dosif. 1 (Lts)",
        'formdialTolva2': "Capacidad Tolva Dosif. 2 (Lts)",
        'formdialCoccion2': "Capacidad Olla de Cocción (Lts)",
        'formdialCrudos2': "Capacidad Olla de Crudos (Lts)",
        'formdialMezclas2': "Capacidad Olla de Mezclas (Lts)",
        'formdialFiltr': "Capacidad Olla de Filtración (Lts)",
        'formdialC1': "Velocidad del Caudal Brazo 1 (m/s)",
        'formdialC2': "Velocidad del Caudal Brazo 2 (m/s)",
        'formdialC3': "Velocidad del Caudal Brazo 3 (m/s)",
        'dialSum': 'cantidad ocupada',
        'dialTolva': 'cantidad ocupada',
        'dialTolva2': 'cantidad ocupada',
        'dialCrudos2': 'cantidad ocupada',
        'dialMezclas': 'temperatura',
        'dialCrudos':  'temperatura',
        'dialMezclas2':  'cantidad ocupada',
        'dialFiltr': 'cantidad ocupada',
        'dialCoccion': 'cantidad ocupada',
        'dialCoccion2': 'cantidad ocupada',
        'dialM': 'cantidad ocupada',
        'dialA': 'cantidad ocupada',
        'phCoccion': 'PH',
        'dialCool': 'temperatura',
        'dialCool2': 'temperatura',
        'formdialClock': 'Tiempo de Fermentación',
        'mostoCrudo': 'Relación Mosto/Grits',
        'dialAzucar': 'Concentración Azúcar',
        'dialF': 'Capacidad Fermentación',
        'dialClock': 'Tiempo de Fermentación',
        'dialC1': 'Caudal',
        'dialC2': 'Caudal',
        'dialC3': 'Caudal'
    },
    createElement: function(tagName, properties) {
        properties.unselectable = 'on';
        if (!properties.class) {
            properties.class = 'unselectable';
        }
        properties.css.cursor = 'pointer';
        var elem = $('<' + tagName + '/>', properties);
        if (tagName == 'canvas') {
            elem.click({me: this}, this.showInfo);
        }
        $("body").append(elem);
    },

    showInfo: function(event) {
        var msg = event.data.me.getMessage();
        if (msg != '') {
            window.alert(msg);
        }
    },

    getMessage: function() {
        var msg = '';
        for (var i = 0; i< this.indicators.length; i++) {
            msg += this.indicators[i].getName() + ': ';
            msg += this.indicators[i].getValue() + '\n';
        }
        return msg;
    },

    getElement: function () {
        return $('#' + this.id);
    },

    writeTag: function (top, left, widthFigure) {
        this.createElement('div', {
            id: this.id + 'tag',
            text: this.getNameForId(this.id),
            css: {
                position: 'absolute',
                top: top,
                left:left,
                cursor : 'pointer'
            },
            'class': 'unselectable',
            unselectable: 'on'
        });
        var created = $('#' + this.id + 'tag');
        var width = created.width();
        if (width > widthFigure) {
            created.css('left', '-=' + width/4);
        }
        else {
            created.css('left', '+=' + width/5);
        }
        created.click({me: this}, this.showInfo);
    },

    getNameForId: function(id) {
        return this.names[id] || id;
    },

    addIndicator: function(id, value, unit, offsetX, offsetY, min, capacity, step, type, extraParams) {
        var top = parseInt(this.element.css('top')) + (offsetX ? offsetX : 0);
        var left = parseInt(this.element.css('left')) + (offsetY ? offsetY : 0);
        var width = DIAL_WIDTH + (unit ? unit.length : 0);
        var css = createCss(top, left, width, DIAL_HEIGHT);
        css['font-size'] = DIAL_SIZE;
        var indicator;
        switch (type) {
            case 'bascula':
                indicator = new figure.Bascula(id, css, value, unit, min, capacity, step);
                break;
            case 'basculaFermentacion':
                indicator = new figure.BasculaFermentacion(id, css, value, unit, min, capacity, step);
                break;
            case 'sensorAzucar':
                indicator = new figure.SensorAzucar(id, css, value, unit, min, capacity, step, extraParams);
                break;
            case 'mezcladora':
                indicator = new figure.Mezcladora(id, css, value, unit, min, capacity, step, extraParams);
                break;
            case 'termometro':
                indicator = new figure.Termometro(id, css, value, unit, min, capacity, step, extraParams);
                break;
            case 'reloj':
                indicator = new figure.Reloj(id, css, value, unit, min, capacity, step);
                break;
            case 'caudalimetro':
                indicator = new figure.Caudalimetro(id, css, value, unit, min, capacity, step);
                break;
            default:
                indicator = new figure.Dial(id, css, value, unit, min, capacity, step);
        }
        this.indicators.push(indicator);
        return indicator;
    }


} );
